package cn.lingyangwl.agile.model.enums;

import cn.lingyangwl.agile.model.constants.*;
import cn.lingyangwl.framework.tool.core.exception.*;
import lombok.AllArgsConstructor;
import lombok.Getter;

import java.util.Arrays;
import java.util.Objects;

/**
 * 数据组业务枚举
 * @author shenguangyang
 */
@Getter
@AllArgsConstructor
public enum DataGroupBizTypeEnum {
    /** 素材分组 */
    MATERIAL(1, true, DataIsolateLevel.ALONE),
    /** 字典组 */
    DICT(2, true, DataIsolateLevel.PLATFORM),
    /** 配置组 */
    CONFIG(3, true, DataIsolateLevel.ALONE),
    /** 消息推送任务功能组 */
    MSG_PUSH_TASK(4, true, DataIsolateLevel.MGT),
    /** 移动端菜单组 */
    MOBILE_MENU(5, true, DataIsolateLevel.MGT),
    /** 数据集(数据库表) */
    DATASET(6, true, DataIsolateLevel.MGT),
    /** 表单设计 */
    DIY_FORM(7, true, DataIsolateLevel.MGT),
    /** 短链平台 */
    SHORT_LINK(8, false, DataIsolateLevel.MGT),

    ;

    private final Integer type;

    /**
     * 是否初始化默认数据组
     */
    private final boolean initDefault;

    /**
     * 查询数据组的隔离基本
     */
    private final DataIsolateLevel isolateLevel;

    public static void checkExistByType(Integer type) {
        if (Arrays.stream(values()).noneMatch(e -> Objects.equals(e.type, type))) {
            throw new BizException("数据组类型不存在, type: {}", type);
        }
    }

    public static DataGroupBizTypeEnum ofByType(Integer type) {
        return Arrays.stream(values()).filter(e -> e.getType().equals(type)).findFirst()
                .orElseThrow(() -> new BizException("数据组不存在, type: {}", type));
    }
}
